// license-header java merge-point
/**
 * This is only generated once! It will never be overwritten.
 * You can (and have to!) safely modify it by hand.
 */
package fr.upstlse.glre.business.domain.user;

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import fr.upstlse.glre.business.vo.user.ProfesseurSearchCriteriaVO;

/**
 * @see fr.upstlse.glre.business.domain.user.Professeur
 */
public class ProfesseurDaoImpl
    extends fr.upstlse.glre.business.domain.user.ProfesseurDaoBase
{
    /**
     * @see fr.upstlse.glre.business.domain.user.ProfesseurDao#toProfesseurVO(fr.upstlse.glre.business.domain.user.Professeur, fr.upstlse.glre.business.vo.user.ProfesseurVO)
     */
    public void toProfesseurVO(
        fr.upstlse.glre.business.domain.user.Professeur source,
        fr.upstlse.glre.business.vo.user.ProfesseurVO target)
    {
        super.toProfesseurVO(source, target);
    }


    /**
     * @see fr.upstlse.glre.business.domain.user.ProfesseurDao#toProfesseurVO(fr.upstlse.glre.business.domain.user.Professeur)
     */
    public fr.upstlse.glre.business.vo.user.ProfesseurVO toProfesseurVO(final fr.upstlse.glre.business.domain.user.Professeur entity)
    {
        return super.toProfesseurVO(entity);
    }


    /**
     * Retrieves the entity object that is associated with the specified value object
     * from the object store. If no such entity object exists in the object store,
     * a new, blank entity is created
     */
    private fr.upstlse.glre.business.domain.user.Professeur loadProfesseurFromProfesseurVO(fr.upstlse.glre.business.vo.user.ProfesseurVO professeurVO)
    {
        fr.upstlse.glre.business.domain.user.Professeur professeur = (Professeur) this.load(professeurVO.getId());
        if (professeur == null)
        {
            professeur = fr.upstlse.glre.business.domain.user.Professeur.Factory.newInstance();
        }
        return professeur;
    }

    
    /**
     * @see fr.upstlse.glre.business.domain.user.ProfesseurDao#professeurVOToEntity(fr.upstlse.glre.business.vo.user.ProfesseurVO)
     */
    public fr.upstlse.glre.business.domain.user.Professeur professeurVOToEntity(fr.upstlse.glre.business.vo.user.ProfesseurVO professeurVO)
    {
        fr.upstlse.glre.business.domain.user.Professeur entity = this.loadProfesseurFromProfesseurVO(professeurVO);
        this.professeurVOToEntity(professeurVO, entity, true);
        return entity;
    }


    /**
     * @see fr.upstlse.glre.business.domain.user.ProfesseurDao#professeurVOToEntity(fr.upstlse.glre.business.vo.user.ProfesseurVO, fr.upstlse.glre.business.domain.user.Professeur)
     */
    public void professeurVOToEntity(
        fr.upstlse.glre.business.vo.user.ProfesseurVO source,
        fr.upstlse.glre.business.domain.user.Professeur target,
        boolean copyIfNull)
    {
        super.professeurVOToEntity(source, target, copyIfNull);
    }


	@Override
	protected List handleFindByCriteria(
			ProfesseurSearchCriteriaVO pProfesseurSearchCriteriaVO)
			throws Exception {
		
		Criteria lProfesseurCriteria = getSession().createCriteria(Professeur.class);
		
		if(pProfesseurSearchCriteriaVO.getLogin() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getLogin(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("login", pProfesseurSearchCriteriaVO.getLogin()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("login", pProfesseurSearchCriteriaVO.getLogin()));
			}
		}
		if(pProfesseurSearchCriteriaVO.getPassword() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getPassword(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("password", pProfesseurSearchCriteriaVO.getPassword()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("password", pProfesseurSearchCriteriaVO.getPassword()));
			}
		}
		if(pProfesseurSearchCriteriaVO.getRole() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getRole().getValue(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("role", pProfesseurSearchCriteriaVO.getRole()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("role", pProfesseurSearchCriteriaVO.getRole()));
			}
		}
		if(pProfesseurSearchCriteriaVO.getNom() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getNom(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("nom", pProfesseurSearchCriteriaVO.getNom()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("nom", pProfesseurSearchCriteriaVO.getNom()));
			}
		}
		if(pProfesseurSearchCriteriaVO.getPrenom() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getPrenom(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("prenom", pProfesseurSearchCriteriaVO.getPrenom()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("prenom", pProfesseurSearchCriteriaVO.getPrenom()));
			}
		}
		if(pProfesseurSearchCriteriaVO.getEmail() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getEmail(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("email", pProfesseurSearchCriteriaVO.getEmail()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("email", pProfesseurSearchCriteriaVO.getEmail()));
			}
		}
		if(pProfesseurSearchCriteriaVO.getEnseignement() != null) {
			if(StringUtils.contains(pProfesseurSearchCriteriaVO.getEnseignement(), "%")) {
				lProfesseurCriteria.add(Restrictions.like("enseignement", pProfesseurSearchCriteriaVO.getEnseignement()));
			}
			else {
				lProfesseurCriteria.add(Restrictions.eq("enseignement", pProfesseurSearchCriteriaVO.getEnseignement()));
			}
		}
		return lProfesseurCriteria.list();
	}

}